上一篇文章中,介紹了 Pandas 中的 Series 結構,今天要和大家聊聊 Pandas 中最常使用的資料結構——DataFrame,其概念和操作都和 Series 有些差異,剛開始學習很容易一頭霧水,趁著這次的機會,一次整理好和大家一起分享!內容包含:
DataFrame 在 Pandas 中適用於處理「雙維度」的資料,是由列(row)和欄(column)組成的「二維陣列」,能將複雜的數據以易於閱讀的結構化資料呈現,如同 Excel 表格一樣,經常應用於讀取 CSV 檔或資料庫,因此成為 Pandas 中最常用的數據結構!
使用 DataFrame( )
語法,搭配 Python 的字典(dict)創建 DataFrame 物件。
舉例:創建名為data,具有姓名、居住縣市、數學成績的 DataFrame 物件
import pandas as pd
data = {'name':['Alan','Chris','Dora','Elsa','Ida'],
'city':['Taipei','Tainan','Yilan','Taichung','Hsinchu'],
'Math':[76,92,63,88,79]}
df = pd.DataFrame(data)
print(df)
輸出結果:
DataFrame 的資料通常具有多筆資料(row)、多個欄位(column),同時擁有「行索引」和「列索引」 ,因此操作上需事先考量要取得的資料屬於「特定行」or「特定列」or「指定資料」!
1. 取得「特定行」 → 使用「索引值」
舉例:在名為 data 的 DataFrame 中,取得第 2、3 行資料 & 第 3 行資料
import pandas as pd
data = {'name':['Alan','Chris','Dora','Elsa','Ida'],
'city':['Taipei','Tainan','Yilan','Taichung','Hsinchu'],
'Math':[76,92,63,88,79]}
df = pd.DataFrame(data)
print(df) # 完整data
print('--------------------')
print(df[1:3]) # 取第2、3行資料
print('--------------------')
print(df[2:3]) # 取第3行資料
輸出結果:
2. 取得「特定列」 → 使用「欄位名稱」
舉例:在名為 data 的 DataFrame 中,取得單一欄位或多欄位資料
import pandas as pd
data = {'name':['Alan','Chris','Dora','Elsa','Ida'],
'city':['Taipei','Tainan','Yilan','Taichung','Hsinchu'],
'Math':[76,92,63,88,79]}
df = pd.DataFrame(data)
print(df[['name']]) # 單獨取name欄位資料
print('--------------------')
print(df[['name','city']]) # 同時取name和city欄位資料
▲ 注意:print 結果時,記得使用兩個中括號,以呈現 DataFrame 格式!
輸出結果:
3. 取得「指定資料」 → 使用「loc、iloc」
(1) 使用 loc [ 行索引值 , 欄位名稱 ]
舉例:在名為 data 的 DataFrame 中,取得行索引值 2、3 中 name 和 Math 的資料
import pandas as pd
data = {'name':['Alan','Chris','Dora','Elsa','Ida'],
'city':['Taipei','Tainan','Yilan','Taichung','Hsinchu'],
'Math':[76,92,63,88,79]}
df = pd.DataFrame(data)
print(df) # 完整data
print('-------------------------')
print(df.loc[2,'name']) # 單獨取索引值為2的name欄位資料
print('-------------------------')
print(df.loc[[2,3],['name','Math']]) # 同時取索引值為2、3的name和Math欄位資料
輸出結果:
(2) 使用 iloc [ 行索引值 , 列索引值 ]
舉例:在名為 data 的 DataFrame 中,取得行索引值 2、3 中,列索引值 0、2 的資料
import pandas as pd
data = {'name':['Alan','Chris','Dora','Elsa','Ida'],
'city':['Taipei','Tainan','Yilan','Taichung','Hsinchu'],
'Math':[76,92,63,88,79]}
df = pd.DataFrame(data)
print(df) # 完整data
print('-------------------------')
print(df.iloc[2,0]) # 單獨取行索引值為2,列索引值為0的資料
print('-------------------------')
print(df.iloc[[2,3],[0,2]]) # 同時取行索引值為2、3,列索引值為0、2的資料
輸出結果:
▲ 這裡可以發現,使用 loc[]
和 iloc[]
的差異點在於中括號後者參數為「欄位名稱」還是「列索引值」!
若想自行定義索引值的話,可以用 index 參數進行設定
舉例:創建名為 data 的 DataFrame 物件,設定索引值為 No1 至 No5
import pandas as pd
data = {'name':['Alan','Chris','Dora','Elsa','Ida'],
'city':['Taipei','Tainan','Yilan','Taichung','Hsinchu'],
'Math':[76,92,63,88,79]}
df = pd.DataFrame(data,index=['No1','No2','No3','No4','No5'])
print(df)
輸出結果:
DataFrame.values
:以 list 返回 DataFrame 中的資料DataFrame.size
:返回 DataFrame 中的元素數量DataFrame.index
:返回 DataFrame 的行索引DataFrame.columns
:返回 DataFrame 的列索引DataFrame.dtypes
:返回 DataFrame 的數據型態DataFrame.shape
:返回 DataFrame 的數據形狀舉例:創建名為 data 的 DataFrame 物件,並觀察其屬性
import pandas as pd
data = {'name':['Alan','Chris','Dora','Elsa','Ida'],
'city':['Taipei','Tainan','Yilan','Taichung','Hsinchu'],
'Math':[76,92,63,88,79]}
df = pd.DataFrame(data)
print(df.values) # DataFrame 中的資料
print('-------------------------')
print(df.size) # DataFrame 中元素數量
print('-------------------------')
print(df.index) # DataFrame 中的行索引
print('-------------------------')
print(df.columns) # DataFrame 中的列索引
print('-------------------------')
print(df.dtypes) # DataFrame 中各欄位型態
print('-------------------------')
print(df.shape) # DataFrame 的數據形狀
輸出結果:
▲ (5,3) 表示為有5行、3列的二維結構!
耶!結束 Pandas 的兩種資料結構介紹了!尤其 DataFrame 的整理真的耗費好多時間,希望大家能看得明白,更認識 DataFrame!如果有任何不理解、錯誤或建議的話,歡迎留言給我!喜歡的話,也歡迎按讚訂閱!明天開始將進入資料處理的各種操作,繼續加油!Fighting~~
我是 Eva,一位正在努力跨進資料科學領域的女子!我們下一篇文章見!Bye Bye~
【本篇文章將同步更新於個人的 Medium】